package net.sinofool.dbpool;
import java.security.InvalidParameterException;
import javax.sql.DataSource;
import net.sinofool.dbpool.config.DBServer;
import net.sinofool.dbpool.config.DBSource;
import org.apache.commons.configuration.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class FlatfileProvider implements ConfigProvider {
private static final Logger logger = LoggerFactory.getLogger(FlatfileProvider.class);
private DBServer read;
private DBServer write;
private DBSource source;
@Override
public void initialize(final Configuration props) throws Exception {
read = loadConfig(props, "dbppool.provider.flatfile.read", DBPool.READ_ACCESS, "", 100);
write = loadConfig(props, "dbppool.provider.flatfile.write", DBPool.WRITE_ACCESS, "", 100);
source = new DBSource();
}
private DBServer loadConfig(final Configuration props, String prefix, int access, String expression, int weight) {
DBServer server = new DBServer();
server.driver = props.getString(prefix + ".driver", "mysql");
server.host = props.getString(prefix + ".host");
server.port = props.getString(prefix + ".port", "3306");
server.user = props.getString(prefix + ".user");
server.pass = props.getString(prefix + ".pass");
server.db = props.getString(prefix + ".db");
server.coreSize = props.getInt(prefix + ".coresize", 1);
server.maxSize = props.getInt(prefix + ".maxsize", 10);
server.idleTimeSeconds = props.getInt(prefix + ".idletimeseconds", 60);
server.access = access;
server.expression = expression;
server.weight = weight;
return server;
}
@Override
public void close() {
source.closeDataSource(read);
source.closeDataSource(write);
}
@Override
public DataSource getDataSource(String instance, int access, String pattern) {
if (!instance.isEmpty() && !pattern.isEmpty()) {
throw new InvalidParameterException("FlatfileProvider support only empty instance name and pattern name.");
}
if (access == DBPool.READ_ACCESS) {
return source.getDataSource(read);
} else if (access == DBPool.WRITE_ACCESS) {
return source.getDataSource(write);
} else {
logger.error("FlatfileProvider is outdated with DBPool");
throw new InvalidParameterException("FlatfileProvider is outdated. This should never happen.");
}
}
}